安全微服务服务通信IO模型包括哪些操作模式
安全微服务服务通信IO模型包括以下操作模式:
阻塞IO:阻塞IO(Blocking IO,BIO)在默认情况下,所有套接口都是阻塞的,意味着IO的发起和结束都需等待。任何一个系统调用都会产生一个由用户态到内核态切换,再从内核态到用户态切换的过程,而进程上下文切换是通过系统中断程序来实现的,需要保存当前进程的上下文状态,这是一个成本很高的过程。
非阻塞IO:如果采用非阻塞 IO(Non-blocking IO,NIO),即当我们把套接口设置成非阻塞时,会由用户进程不停地询问内核某种操作是否准备就绪,这就是我们常说的轮询(Polling)。这同样是一件比较浪费CPU的方式。
IO复用:IO复用主要依赖于操作系统提供的select和poll机制。同样会阻塞进程,但是这里进程是阻塞在select或者poll这两个系统调用上,而不是阻塞在真正的IO操作上。另外还有一点不同于阻塞 IO 的就是,尽管看起来 IO 复用阻塞了两次,但是第一次阻塞是在 select 上, select可以监控多个套接口上是否已有IO操作准备就绪,而不是像阻塞IO那种,一次只能监控一个套接口。
信号驱动IO:信号驱动IO就是说我们可以通过sigaction系统调用注册一个信号处理程序,然后主程序可以继续向下执行,当我们所监控的套接口有IO操作准备就绪时,由内核通知触发前面注册的信号处理程序执行,然后将我们所需要的数据从内核空间复制到用户空间。
异步IO:异步IO(Asynchronous IO,AIO)与信号驱动IO最主要的区别就是信号驱动IO是由内核通知我们何时可以进行IO操作,而异步IO则是由内核告诉我们IO操作何时完成了。具体来说,信号驱动IO中当内核通知触发信号处理程序时,信号处理程序还需要阻塞在从内核空间缓冲区复制数据到用户空间缓冲区这个阶段,而异步IO是在第二个阶段完成后内核直接通知可以进行后续操作。